#ifndef AVCOMMON_H
#define AVCOMMON_H

extern "C"
{
#include "libavcodec/avcodec.h" //音视频编解码头文件
#include "libavformat/avformat.h" //音视频格式封装头文件
}

class AVCommon
{
public:
    AVCommon();
};

#endif // AVCOMMON_H
#ifndef AVDecoder_H
#define AVDecoder_H
#include <mutex>
#include <memory> //智能指针库
extern "C"
{
#include "libavcodec/avcodec.h"  //这是音视频编解码头文件
#include "libavformat/avformat.h" //这是音视频格式封装头文件
}


using AVFramePtr = std::shared_ptr<AVFrame>;     //解码数据
using AVPacketPtr = std::shared_ptr<AVPacket>;   //原始数据

class AVDecodeBase
{
public:
    AVDecodeBase(); //构造函数
    AVDecodeBase(const AVDecodeBase&) = delete;
    AVDecodeBase& operator=(const AVDecodeBase&) = delete;
    ~AVDecodeBase(); //析构函数
protected:
    bool is_initial_ = false;  //是否初始化解码器
    AVCodec*        codec_ = nullptr; //解码器
    std::mutex      mutex_;           //互斥量，多线程安全
    AVCodecContext* codecCodec_ = nullptr;  //编码器上下文
};

#endif // AVDecoder_H
